package com.example.common.view.view

import android.content.Intent
import android.os.Bundle
import androidx.databinding.ViewDataBinding
import com.example.base.view.BaseFragment
import com.example.common.view.event.CustomEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode

//架构模式下的BaseFragment
class BaseMvvmFragment<VDB:ViewDataBinding> : BaseFragment<VDB>() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //获取数据
        loadData()
        //订阅数据
        oserveDataChanged()
        //EventBus事件总线
        EventBus.getDefault().register(this)
    }
    //接收事件
    @Subscribe(threadMode = ThreadMode.MAIN)
    public fun onReceiveEvent(event: CustomEvent){
        //校验是否为当前页面接收的事件
        if (event != null && event.target == this.javaClass.simpleName){
            handEvent(event)
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        //反注册，防止内存溢出
        EventBus.getDefault().unregister(this)
    }
    //交给子类处理事件
    protected open fun handEvent(event: CustomEvent){

    }
    /*************  系统提供API实现页面之间传值  ***************/
    protected open fun startNextActivity(intent: Intent?){
        intent?.run {
            startActivity(this)
        }
    }
    protected open fun startNextActivityForResult(intent: Intent?, requestCode:Int){
        intent?.run {
            startActivityForResult(this,requestCode)
        }
    }

    override fun getLayoutId(): Int {
        TODO("Not yet implemented")
    }

    override fun initView() {
        TODO("Not yet implemented")
    }

    override fun onActivityResult(
        requestCode: Int,
        resultCode: Int,
        data: Intent?,

        ) {
        super.onActivityResult(requestCode, resultCode, data)
        receiveNextForResult(requestCode, resultCode, data)
    }
    protected open fun receiveNextForResult(
        requestCode: Int, resultCode: Int, data: Intent?, ){

    }
    /*************  系统提供API实现页面之间传值  ***************/

    //可以根据业务需要重写方法
    protected open fun loadData(){

    }
    //可以根据业务需要重写方法
    protected open fun oserveDataChanged(){

    }
}